// 购物车信息
import { insertCart, findCartList, deleteCart, updateCart, checkAllCart } from '@/api/cart'
export default {
  namespaced: true,
  state () {
    return {
      cartList: []
    }
  },
  // getters 要加工之后在显示的数据
  getters: {
    // 商品总数
    allCount (state) {
      let total = 0
      state.cartList.forEach(item => {
        total += item.count
      })
      return total
    },
    // 商品总价钱
    allPrice (state) {
      let total = 0
      state.cartList.forEach(item => {
        total += item.count * item.price
      })
      return total
    },
    // 选中商品数
    selectCount (state) {
      return state.cartList.filter(item => item.selected).reduce((acc, cur) => {
        return acc + cur.count
      }, 0)
    },
    // 选中的价格
    selectPay (state) {
      return state.cartList.filter(item => item.selected).reduce((acc, cur) => {
        return acc + cur.count * cur.price
      }, 0)
    }
  },
  mutations: {
    setCartList (state, payload) {
      state.cartList = payload
    }
  },
  actions: {
    async getCartList (context, payload) {
      // 1. 调用接口，添加到购物车
      await insertCart(payload)
      // 2. 重新从购物车取出最新的数据
      const res = await findCartList()
      // 3. 更新state
      context.commit('setCartList', res.result)
    },
    // 删除购物车
    async DelCart (context, skuIds) {
      await deleteCart(skuIds)
      // 重新从购物车取出最新的数据
      const res = await findCartList()
      // 更新state
      context.commit('setCartList', res.result)
    },
    // 更新购物车
    async UpdateCart (context) {
      // 重新从购物车取出最新的数据
      const res = await findCartList()
      // 更新state
      context.commit('setCartList', res.result)
    },
    // 更新购物车商品的选中状态
    async SingleCheck (context, goods) {
      // 1. 调用接口，修改商品的状态
      await updateCart(goods)
      // 2. 重新从购物车取出最新的数据
      const res = await findCartList()
      console.log(res)
      // 3. 更新state
      context.commit('setCartList', res.result)
    },
    // 全选
    async AllCheckout (context, selected) {
      const ids = context.state.cartList.map(it => it.skuId)
      // 1. 调用接口，获取所有商品的选中状态
      await checkAllCart({ selected, ids })
      // 2. 重新从购物车取出最新的数据
      const res = await findCartList()
      // 3. 更新state
      context.commit('setCartList', res.result)
    },
    // 更新商品数量
    async changeCount (context, goods) {
      // 调用接口，修改商品数量
      await updateCart(goods)
      // 重新从购物车取出最新数据
      const res = await findCartList()
      context.commit('setCartList', res.result)
    }

  }

}
